/*
 * Quercia Luciano
 * Algoritmi e Strutture Dati
 * a.a. 2009-10
 */


#include "grafo.h"

#include <iostream>
using namespace std;


int main() {
	typedef Grafo<int> GrafoInt;
	typedef GrafoInt::nodo NodoInt;

	try {
		GrafoInt g;
		NodoInt n1, n2, n3;

		cout << "Grafo vuoto? ";
		cout << ( (g.grafoVuoto())? "VERO" : "FALSO") << endl;


		cout << "Inserisco 1" << endl;
		n1 = g.creaNodo( 1 );
		g.insNodo( n1 );

		cout << "Inserisco 2" << endl;
		n2 = g.creaNodo( 2 );
		g.insNodo( n2 );

		cout << "Inserisco 3" << endl;
		n3 = g.creaNodo( 3 );
		g.insNodo( n3 );


		cout << "Esiste Label \"1\" ? ";
		cout << ( (g.esisteNodo(1))?"VERO":"FALSO"  ) << endl;

		cout << "Esiste Label \"4\" ? ";
		cout << ( (g.esisteNodo(4))?"VERO":"FALSO"  ) << endl;

		cout << "Collego 1 con 2" << endl;
		g.insArco( n1, n2 );

		cout << "Collego 2 con 1" << endl;
		g.insArco( n2, n1 );


		cout << "Esiste 1-->2 ?  " ;
		cout << ( ( g.esisteArco( n1, n2 ) )? "VERO" : "FALSO" ) << endl;

		cout << "Esiste 2-->1 ?  " ;
		cout << ( ( g.esisteArco( n2, n1 ) )? "VERO" : "FALSO" ) << endl;

		cout << "Esiste 3-->1 ?  " ;
		cout << ( ( g.esisteArco( n3, n1 ) )? "VERO" : "FALSO" ) << endl;


		cout << "Esiste 1-->3 ?  " ;
		cout << ( ( g.esisteArco( n1, n3 ) )? "VERO" : "FALSO" ) << endl;

		cout << "Collego 1 con 3" << endl;
		g.insArco( n1, n3 );

		cout << "Esiste 1-->3 ?  " ;
		cout << ( ( g.esisteArco( n1, n3 ) )? "VERO" : "FALSO" ) << endl;

		cout << "Distacco 1 da 3" << endl;
		g.cancArco( n1, n3 );

		cout << "Esiste 1-->3 ?  " ;
		cout << ( ( g.esisteArco( n1, n3 ) )? "VERO" : "FALSO" ) << endl;

		cout << "Grafo vuoto? ";
		cout << ( (g.grafoVuoto())? "VERO" : "FALSO") << endl;

		cout << "Distacco 1 da 2" << endl;
		g.cancArco( n1, n2 );

		cout << "Distacco 2 da 1" << endl;
		g.cancArco( n2, n1 );

		cout << "Cancello 1" << endl;
		g.cancNodo( n1 );

		cout << "Cancello 2" << endl;
		g.cancNodo( n2 );

		cout << "Cancello 3" << endl;
		g.cancNodo( n3 );

		cout << "Grafo vuoto? ";
		cout << ( (g.grafoVuoto())? "VERO" : "FALSO") << endl;

	} catch (char const * mex) {
		cout << mex << endl;
	}

	return 0;
}
